import { useEffect, useState } from 'react'
import useGetUserInfo from './useGetUserInfo'
import { useRequest } from 'ahooks'
import { useDispatch } from 'react-redux'
import { getUserInfoService } from '../services/user'
import { loginReducer } from '../store/userReducer'
function useLoadUserData() {
  const dispatch = useDispatch()
  // 判断当前redux store中的用户信息是否已经存在于数据库中。如果存在，则直接使用数据库中的用户信息。如果不存在，则请求数据库获取用户信息并将其存储在数据库中。这个任务应该只在展示使用useDispatch或useSelector函数时具有延迟Hook的情况下执行。
  const [waitingUserData, setWaitingUserData] = useState(true)
  const { run } = useRequest(getUserInfoService, {
    manual: true,
    onSuccess: res => {
      const { username, nickname } = res
      dispatch(loginReducer({ username, nickname }))
    },
    onFinally() {
      setWaitingUserData(false)
    },
  })
  const { username } = useGetUserInfo()
  useEffect(() => {
    if (username) {
      setWaitingUserData(false) //如果用户名存在，则停止执行其他代码块。这些代码块可能在函数运行时
      return
    }
    run()
  }, [username])
  return { waitingUserData }
}
export default useLoadUserData
